package com.fwh.web.utils.img;


import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;

/**
 * @ClassName ImgUtils
 * @Description 图片base64转换
 * @Author fwh
 * @Date 2019/11/18 13:39
 * @Version 1.0
 */
public class ImgUtils {
    /**
     * 图片转换成base64编码
     *
     * @param imageFile 图片文件网络路径
     * @return java.lang.String
     * @author fwh
     * @date 2019/11/18 13:45
     */
    public static String encodeImageToBase64(URL imageFile) {
        //网络图片地址
        //获取图片信息
        //转换成流信息
        //base64存储写入
        try {
            BufferedImage bufferedImage = ImageIO.read(imageFile);
            return imageToBase64(bufferedImage);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 图片转换成base64编码
     *
     * @param file 本地图片路径
     * @return java.lang.String
     * @author fwh
     * @date 2019/11/18 13:56
     */
    public static String encodeImageToBase64(File file) {
        //文件类型
        //获取图片信息
        //转换成流信息
        //base64存储写入
        try {
            BufferedImage bufferedImage = ImageIO.read(file);
            return imageToBase64(bufferedImage);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String imageToBase64(BufferedImage bufferedImage) throws IOException {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream);
        BASE64Encoder base64Encoder = new BASE64Encoder();
        String encode = base64Encoder.encode(byteArrayOutputStream.toByteArray());
        return encode;
    }

    /**
     * base64文件流转换成图片
     *
     * @param base64    文件流
     * @param path      存储路径
     * @param imageName 图片名称
     * @return void
     * @author fwh
     * @date 2019/11/18 13:57
     */
    public static void base64ToImage(String base64, String path, String imageName) {
        try {
            FileOutputStream fileOutputStream = new FileOutputStream(new File(path + imageName));
            fileToImage(base64, fileOutputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * base64文件流转换成图片
     *
     * @param base64
     * @param path   文件完整路径包含文件名
     * @return void
     * @author fwh
     * @date 2019/11/18 14:29
     */
    public static void base64ToImage(String base64, String path) {

        try {
            FileOutputStream fileOutputStream = new FileOutputStream(new File(path));
            fileToImage(base64, fileOutputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void fileToImage(String base64, FileOutputStream fileOutputStream) {
        try {
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] bytes = decoder.decodeBuffer(base64);
            fileOutputStream.write(bytes);
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
